/**
 * Copyright 2012-2013 Brin.com
 * All rights reserved.
 * 
 * @project
 * @author Brin
 * @version 1.0
 * @data 2013-04-20
 */
package com.brin.core.menu;

import java.util.ArrayList;
import java.util.List;

import com.brin.core.model.MenuPOJO;

/**
 * 导航菜单Util
 * @author brin
 *
 */
public class MenuUtil {

	private static final MenuUtil menuUtil = new MenuUtil();
	
	private MenuUtil(){
		
	}
	
	public static MenuUtil getInstance(){
		return menuUtil;
	}
	
	/**
	 * 返回二级菜单
	 * @param list
	 * @return
	 */
	public static List<List<MenuPOJO>> getSecondaryMenu(List<MenuPOJO> list){
		List<List<MenuPOJO>> ul = new ArrayList<List<MenuPOJO>>();
		for(int i = 0; i < getRootNodeCount(list); i ++){
			List<MenuPOJO> li = new ArrayList<MenuPOJO>();
			for(int j = 0; j < list.size(); j ++){
				if(list.get(j).getParentId() == getMinParentIdRootNode(list)){
					li.add(list.get(j));
					List<MenuPOJO> lis = getChildenMenuList(list.get(j).getParentId(), list);
					if(lis != null && lis.size() > 0){
						for(int k = 0; k < lis.size(); k ++){
							li.add(lis.get(k));
						}
					}
				}
			}
			ul.add(li);
		}
		return ul;
	}
	
	/**
	 * 获取根节点下面的所有子节点
	 * @param parentId
	 * @param list
	 * @return
	 */
	static List<MenuPOJO> getChildenMenuList(int parentId, List<MenuPOJO> list){
		List<MenuPOJO> li = new ArrayList<MenuPOJO>();
		for(int i = 0; i < list.size(); i ++){
			if(list.get(i).getParentId() == parentId){
				li.add(list.get(i));
			}
		}
		return li;
	}
	
	/**
	 * 返回parentId
	 * @param list
	 * @return
	 */
	static List<Integer> getRootId(List<MenuPOJO> list){
		List<Integer> li = new ArrayList<Integer>();
		for(int i = 0; i < list.size(); i ++){
			if(i == 0){
				li.add(list.get(i).getParentId());
			}else{
				boolean flag = true;
				for(int j = 0; j < li.size(); j ++){
					if(li.get(j) == list.get(i).getParentId()){
						flag = false;
						break;
					}
				}
				if(flag){
					li.add(list.get(i).getParentId());
				}
			}
		}
		return li;
	}
	
	/**
	 * 获取根节点的个数
	 * @param list
	 * @return
	 */
	static int getRootNodeCount(List<MenuPOJO> list){
		int count = 0;
		int temp = getMinParentIdRootNode(list);
		for(int i = 0; i < list.size(); i ++){
			if(list.get(i).getParentId() == temp){
				count ++;
			}
		}
		return count;
	}
	
	/**
	 * 获取父节点ID的最小值
	 * @param list
	 * @return
	 */
	static int getMinParentIdRootNode(List<MenuPOJO> list){
		List<MenuPOJO> menu = list;
		MenuPOJO temp = new MenuPOJO();
		for(int i = 1; i < menu.size(); i ++){
			for(int j = 0; j < i; j ++){
				if(menu.get(j).getParentId() > menu.get(i).getParentId()){
					temp = menu.get(j);
					menu.set(j, menu.get(i));
					menu.set(i, temp);
				}
			}
		}
		return menu.get(0).getParentId();
	}
	
}
